package com.banmoon.algorithm.classical;

public class Hanoi {

    public static void main(String[] args) {
        hanoi(3, 'A', 'B', 'C');
    }

    /**
     * 移动汉诺塔
     * @param i 当前的盘子
     * @param from 开始的位置
     * @param assist 辅助的位置
     * @param to 目标的位置
     */
    public static void hanoi(int i, char from, char assist, char to) {
        // 将盘子看成两部分，最下面的一个，和最上面的所有
        if (i == 1) {
            // 如果仅有一个盘子，直接移动即可
            System.out.println(String.format("将第%s个盘子从%s移动到%s", i, from, to));
        }
        else {
            // 将上面的所有移动到，辅助位置（如此一来，辅助位置就变成了此处的目标位置）
            hanoi(i-1, from, to, assist);
            // 将当前的盘子移动到目标位置
            System.out.println(String.format("将第%s个盘子从%s移动到%s", i, from, to));
            // 将目前处于辅助位置的盘子，分成两部分，上面部分移动到原先开始的位置，下面部分移动到目标位置
            hanoi(i-1, assist, from, to);
        }
    }

}
